package com.hk.redundantcode.templatemethod.right;

import com.hk.redundantcode.templatemethod.Db;
import com.hk.redundantcode.templatemethod.Item;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

@Service
public class VipUserCart extends AbstractCart{

    @Override
    protected void processCouponPrice(long userId, Item item) {
        if (item.getQuantity() > 2) {
            item.setCouponPrice(item.getPrice()
                    .multiply(BigDecimal.valueOf(100 - Db.getUserCouponPercent(userId)).divide(new BigDecimal("100")))
                    .multiply(BigDecimal.valueOf(item.getQuantity() - 2)));
        } else {
            item.setCouponPrice(BigDecimal.ZERO);
        }
    }

    @Override
    protected void processDeliveryPrice(long userId, Item item) {
        item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).multiply(new BigDecimal("0.1")));
    }

//    public Cart process(long userId, Map<Long, Integer> items) {
//        Cart cart = new Cart();
//
//        List<Item> itemList = new ArrayList<>();
//        items.entrySet().stream().forEach(entry -> {
//            Item item = new Item();
//            item.setId(entry.getKey());
//            item.setPrice(Db.getItemPrice(entry.getKey()));
//            item.setQuantity(entry.getValue());
//            itemList.add(item);
//        });
//        cart.setItems(itemList);
//
//        itemList.stream().forEach(item -> {
//            //运费为商品总价的10%
//            item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).multiply(new BigDecimal("0.1")));
//            //购买两件以上相同商品，第三件开始享受一定折扣
//            if (item.getQuantity() > 2) {
//                item.setCouponPrice(item.getPrice()
//                        .multiply(BigDecimal.valueOf(100 - Db.getUserCouponPercent(userId)).divide(new BigDecimal("100")))
//                        .multiply(BigDecimal.valueOf(item.getQuantity() - 2)));
//            } else {
//                item.setCouponPrice(BigDecimal.ZERO);
//            }
//        });
//
//        cart.setTotalItemPrice(cart.getItems().stream().map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))).reduce(BigDecimal.ZERO, BigDecimal::add));
//        cart.setTotalDeliveryPrice(cart.getItems().stream().map(Item::getDeliveryPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
//        cart.setTotalDiscount(cart.getItems().stream().map(Item::getCouponPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
//        cart.setPayPrice(cart.getTotalItemPrice().add(cart.getTotalDeliveryPrice()).subtract(cart.getTotalDiscount()));
//        return cart;
//    }
}
